//
//  STAlertView.swift
//  STKitSwift
//
//  The MIT License (MIT)
//
//  Copyright (c) 2019 沈天
//
//  Permission is hereby granted, free of charge, to any person obtaining a copy
//  of this software and associated documentation files (the "Software"), to deal
//  in the Software without restriction, including without limitation the rights
//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//  copies of the Software, and to permit persons to whom the Software is
//  furnished to do so, subject to the following conditions:
//
//  The above copyright notice and this permission notice shall be included in all
//  copies or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
//  SOFTWARE.

import UIKit

public class STAlertView: UIAlertController {

    @discardableResult
    public class func show(title:String?,
                           message: String?,
                           cancelTitle: String?,
                           otherTitle: String?,
                           preferredStyle: Style = .alert,
                           completion:((Int) -> Void)? = nil) -> STAlertView{
        var style = preferredStyle
        if UIDevice.isPad {
            style = .alert
        }
        let alertView = STAlertView.init(title: title, message: message, preferredStyle: style)
        if let title = cancelTitle {
            let alertCancel: UIAlertAction = UIAlertAction.init(title: title, style: .cancel) { (_) in
                completion?(0)
            }
            alertView.addAction(alertCancel)
        }

        if let title = otherTitle {
            let alertOther: UIAlertAction = UIAlertAction.init(title: title, style: .default) { (_) in
                completion?(1)
            }
            alertView.addAction(alertOther)
        }
        
        let controller = UIViewController.topMost ?? UIViewController()
        controller.present(alertView, animated: true, completion: nil)
        return alertView
    }
    
    @discardableResult
    public class func show(title:String?,
                           message: String?,
                           titleOne: String?,
                           titleTwo: String?,
                           cancelTitle: String?,
                           preferredStyle: Style = .actionSheet,
                           completion:((Int) -> Void)? = nil) -> STAlertView{
        var style = preferredStyle
        if UIDevice.isPad {
            style = .alert
        }
        let alertView = STAlertView.init(title: title, message: message, preferredStyle: style)
        if let title = titleOne {
            let alertOther: UIAlertAction = UIAlertAction.init(title: title, style: .default) { (_) in
                completion?(1)
            }
            alertView.addAction(alertOther)
        }
        
        if let title = titleTwo {
            let alertOther: UIAlertAction = UIAlertAction.init(title: title, style: .default) { (_) in
                completion?(2)
            }
            alertView.addAction(alertOther)
        }
        
        if let title = cancelTitle {
            let alertCancel: UIAlertAction = UIAlertAction.init(title: title, style: .cancel) { (_) in
                completion?(0)
            }
            alertView.addAction(alertCancel)
        }
        
        let controller = UIViewController.topMost ?? UIViewController()
        controller.present(alertView, animated: true, completion: nil)
        return alertView
    }
}
